﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using DataLayer.dbml;
using DataLayer.Controller;
using obout_ASPTreeView_2_NET;
using OboutInc.Flyout2;


public partial class services_Case : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        this.configExport();
        this.Grid1.SelectedRecords = null;        
        if (!IsPostBack)
        {            

            //this.hdnNIT.Value = "900092385-00";
            //loadTree("900092385-00");

            if (Request.QueryString["NIT"] != null)
            {
                this.hdnNIT.Value = Request.QueryString["NIT"].ToString();

                //Trae el idCuenta del nit
                CUENTA cta = AccountController.GetCuentaByNit(this.hdnNIT.Value);
                this.hdnIdCuenta.Value = cta.ID_CUENTASFDC;
                this.hdnTipoCliente.Value = cta.TIPO_CLIENTE;

                //Si el cliente es residencial, directo o final no se muestra el arbol
                if (!((this.hdnTipoCliente.Value.Equals("Clientes residenciales")) || (this.hdnTipoCliente.Value.Equals("Clientes Directos")) || (this.hdnTipoCliente.Value.Equals("Clientes finales"))))
                    loadTree(Request.QueryString["NIT"].ToString());
                else
                    loadGrid();
                
            }

            //Si llega idServicio se asigna a la variable del nodo seleccionado, para que se carguen solamente los
            //casos de ese servicio
            if (Request.QueryString["idServicio"] != null)
            {
                this.hdnNodoSeleccionado.Value = "2" + Request.QueryString["idServicio"].ToString();
                this.loadGrid();
            }

        }
        else
        {
            //Se genero el postback desde el treeview o se esta paginando
            this.loadGrid();

            if (this.hdnPostBackTree.Value != null)
            {
                if (this.hdnPostBackTree.Value.ToString().Equals("1"))
                    this.hdnPostBackTree.Value = "0";

                this.txtSearch.Text = string.Empty;                                   
            }
        }
    }

    //private void prueba()
    //{ 
    //    //DateTime fechaApertura = DateTime.Parse("2011-10-28 21:18:48");
    //    //DateTime fechaCierre = DateTime.Now;
    //    string desc = "Este caso se crea como prueba para envió a PW Axesat S.A. 28102011-0351PM";
    //    CaseController.Insert("500T0000004AJuZIAW", "00138597", "Petición", "Cambio de plan", "Cambio de Tecnología", "Nuevo", "2011-10-28 21:18:48", "", desc, 0, "001T000000qwUNWIA2", "a0nT0000000MCOWIA4", "006T0000008niyvIAA", "001T000000qwUNWa0dT0000001AS7y", "a01T000000LioUDIAZ");
    //}


    /// <summary>
    /// carga el arbol
    /// </summary>
    private void loadTree(string nit)
    {
        obout_ASPTreeView_2_NET.Tree oTree;
        string paramSearch = string.Empty;
        string attachTo = string.Empty;

        if (Session["ARBOL"] == null)
        {
            oTree = new obout_ASPTreeView_2_NET.Tree();
            oTree.FolderIcons = "../style/tree2/icons";
            oTree.FolderScript = "../style/tree2/script";
            oTree.FolderStyle = "../style/tree2/style/Classic";
            oTree.ShowRootIcon = true;
            oTree.ShowRootPlusMinus = true;
            oTree.AddRootNode("<div onmouseover=\"CursorMano(this); \">Todos</div>", true, "folderOpen16.jpg");
            oTree.EventList = "OnNodeSelect";


            //Trae el idCuenta del nit
            CUENTA cta = AccountController.GetCuentaByNit(nit);
            string idCuenta = cta.ID_CUENTASFDC;

            //List<CLIENTE_FINAL> listClient = FinalClientController.GetAllByCuenta(nit, paramSearch);
            DataTable dt = ServicesController.GetArbolServicios(nit, idCuenta);

            tblError.Visible = false;
            //if (listClient.Count() <= 0)
            //{
            //    tblError.Visible = true;
            //    return;
            //}
            if (dt.Rows.Count <= 0)
            {
                tblError.Visible = true;
                return;
            }

            string idProyecto = "";
            string idClienteFinal = "";
            foreach (DataRow dr in dt.Rows)
            {
                //Si cambia el idClienteFinal se agrega al árbol
                if (idClienteFinal != dr["idClienteFinal"].ToString())
                {
                    oTree.Add("root", "0" + dr["idClienteFinal"].ToString(), "<div onmouseover=\"CursorMano(this); \">" + dr["clienteFinal"].ToString() + "</div>", true, "folderOpen16.jpg");
                    attachTo += "0" + dr["idClienteFinal"].ToString() + ",";
                }

                //Si cambia el idProyecto se agrega al árbol
                if (idProyecto != dr["idProyecto"].ToString())
                {
                    oTree.Add("0" + dr["idClienteFinal"].ToString(), "1" + dr["idProyecto"].ToString(), "<div onmouseover=\"CursorMano(this); \">" + dr["proyecto"].ToString() + "</div>", true, "folderOpen16.jpg");
                    attachTo += "1" + dr["idProyecto"].ToString() + ",";
                }

                //Se agrega el servicio
                //oTree.Add("1" + dr["idProyecto"].ToString(), "2" + dr["idServicio"].ToString(), "<div onmouseover=\"CursorMano(this); \">" + dr["servicio"].ToString() + "</div>", true, "Services21.jpg");

                idClienteFinal = dr["idClienteFinal"].ToString();
                idProyecto = dr["idProyecto"].ToString();
            }
            Session["ARBOL"] = oTree;
        }
        else
        {
            oTree = (obout_ASPTreeView_2_NET.Tree)Session["ARBOL"];
        }


        //foreach (CLIENTE_FINAL cf in listClient)
        //{
        //    oTree.Add("root", "0" + cf.ID_CLIENTEFINALSDFC, "<div onmouseover=\"CursorMano(this); \">" + cf.NOMBRE_CLIENTEFINAL + "</div>", true, "folderOpen16.jpg");
        //    attachTo += "0" + cf.ID_CLIENTEFINALSDFC + ",";

        //    paramSearch = string.Empty;

        //    //if (ddlTypeSearch.SelectedValue == "2")
        //    //    paramSearch = txtSearch.Text;

        //    List<PROYECTO> listpt = ProjectController.GetAllByFinalClient(cf.ID_CLIENTEFINALSDFC, paramSearch, idCuenta);
        //    foreach (PROYECTO pt in listpt)
        //    {
        //        oTree.Add("0" + cf.ID_CLIENTEFINALSDFC, "1" + pt.ID_PROYECTOSFDC, "<div onmouseover=\"CursorMano(this); \">" + pt.NOMBRE_PROYECTO + "</div>", true, "folderOpen16.jpg");
        //        attachTo += "1" + pt.ID_PROYECTOSFDC + ",";

        //        paramSearch = string.Empty;

        //        //if (ddlTypeSearch.SelectedValue == "3")
        //        //    paramSearch = txtSearch.Text;

        //        List<SERVICIO> listSvcs = ServicesController.GetAllByProject(pt.ID_PROYECTOSFDC, paramSearch, idCuenta);
        //        foreach (SERVICIO svc in listSvcs)
        //        {
        //            oTree.Add("1" + pt.ID_PROYECTOSFDC, "2" + svc.ID_SERVICIOSDFC, "<div onmouseover=\"CursorMano(this); \">" + svc.NOMBRE_SERVICIO + "</div>", true, "Services21.jpg");
        //        }
        //    }
        //}

        this.trvClient.Text = oTree.HTML();

        if (attachTo.Length > 0)
            attachTo = attachTo.Substring(0, attachTo.Length - 1);

        Flyout2.AttachTo = attachTo;
        Flyout2.OpenEvent = OpenEvents.ONRIGHTCLICK;
        Flyout2.Position = PositionStyle.MIDDLE_RIGHT;                

    }

    /// <summary>
    /// Configura las opciones que se utilizaran para exportar la grilla
    /// </summary>
    private void configExport()
    {
        this.Grid1.ExportingSettings.AppendTimeStamp = false;
        this.Grid1.ExportingSettings.ExportAllPages = true;
        this.Grid1.ExportingSettings.ExportHiddenColumns = true;
        this.Grid1.ExportingSettings.FileName = "Casos";
        this.Grid1.ExportingSettings.KeepColumnSettings = false;
        this.Grid1.ExportingSettings.ExportTemplates = true;      

        //this.Grid1.ExportingSettings.ColumnsToExport = null;
        this.Grid1.ExportingSettings.ColumnsToExport = "numero_caso,estado,fechaApertura2,fechaCierre2,enlace,motivo,prioridad";
    }

    private void loadGrid()
    {
        this.Grid1.DataSource = null;
        this.Grid1.DataBind();

        //Si el cliente es residencial, directo o final se le muestran de una vez todos los servicios
        if (this.hdnTipoCliente.Value.Equals("Clientes residenciales") || this.hdnTipoCliente.Value.Equals("Clientes Directos") || this.hdnTipoCliente.Value.Equals("Clientes finales"))
            this.hdnNodoSeleccionado.Value = "root_tree1";

        if ((this.hdnNodoSeleccionado.Value.ToString().Length > 0) || (this.hdnRightClickSeleccionado.Value.ToString().Length > 0) || (this.txtSearchVisible.Text.Trim().Length > 0))
        {
            string paramSearch = this.txtSearch.Text.Trim();
            paramSearch = paramSearch.Replace(",", "");

            if (paramSearch.Length == 0)
            {
                paramSearch = this.txtSearchVisible.Text.Trim();
                paramSearch = paramSearch.Replace(",", "");
            }

            //Se obtiene el nivel del nodo seleccionado, que esta en el id
            int nivelNodo = -1;
            string idNodo = string.Empty;
            if (this.hdnNodoSeleccionado.Value.ToString().Length > 0)
            {
                //Si es el nodo raíz
                if (this.hdnNodoSeleccionado.Value.ToString().Equals("root_tree1"))
                {
                    nivelNodo = -1;
                    idNodo = "0";
                }
                else
                {
                    nivelNodo = Convert.ToInt32(this.hdnNodoSeleccionado.Value.ToString().Substring(0, 1));
                    idNodo = this.hdnNodoSeleccionado.Value.ToString().Substring(1);                
                }
            }
            else if (this.hdnRightClickSeleccionado.Value.ToString().Length > 0)
            {
                nivelNodo = Convert.ToInt32(this.hdnRightClickSeleccionado.Value.ToString().Substring(0, 1));
                idNodo = this.hdnRightClickSeleccionado.Value.ToString().Substring(1);
            }

            //Se determina si se busca por cliente, proyecto o servicio, dependiendo del nodo seleccionado
            DataLayer.Utilities.PropertiesApp.Jerarquia jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Cliente;
            if (nivelNodo == 2)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Servicio;
            else if (nivelNodo == 1)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Proyecto;
            else if (nivelNodo == 0)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Cliente;
            else if (nivelNodo == -1)
                jerarquia = DataLayer.Utilities.PropertiesApp.Jerarquia.Todos;


            DataTable dttDetail = CaseController.GetCaseDetail(idNodo, jerarquia, paramSearch, this.hdnIdCuenta.Value);

            //Da formato a columnas de fechas
            for (int i = 0; i < dttDetail.Rows.Count; i++)
            {
                dttDetail.Rows[i]["fechaCierre2"] = this.FormatearFecha(dttDetail.Rows[i]["fechaCierre"].ToString());
                dttDetail.Rows[i]["fechaApertura2"] = this.FormatearFecha(dttDetail.Rows[i]["fechaApertura"].ToString());
            }

            this.Grid1.DataSource = dttDetail;
            this.Grid1.DataBind();

            //Se guarda en session la tabla de los resultados, para poder filtrar
            Session["VIEWCASES"] = dttDetail;
            txtSearch.Text = string.Empty;

            this.hdnNodoSeleccionado.Value = "";
            this.hdnRightClickSeleccionado.Value = "";

        }

    }

    protected void Grid1_RowDataBound(object sender, Obout.Grid.GridRowEventArgs e)
    {

        if (e.Row.RowType == Obout.Grid.GridRowType.DataRow)
        {            
            HyperLink lnkComments = (HyperLink)e.Row.Cells[1].Controls[0].Controls[0].Controls[0].Controls[0].Controls[1];
            lnkComments.NavigateUrl = "Javascript:openShadowbox('" + ConfigurationManager.AppSettings["urlPortal"] + "/services/CaseComment.aspx?idCaso=" + DataBinder.Eval(e.Row.DataItem, "id_caso").ToString().Trim() + "','iframe','Estado del Caso',1100,750);";
        }
    }

    protected void btnSearch_Click(object sender, ImageClickEventArgs e)
    {
        //Se hizo busqueda con el click derecho sobre el arbol, se tiene en cuenta solamente el nodo sobre
        //el que se dio click derecho
        this.hdnNodoSeleccionado.Value = "";
        //No se de donde aparecen estas comas en el textbox
        this.txtSearch.Text = this.txtSearch.Text.Replace(",", "");

        //this.loadGrid();
        //txtSearch.Text = string.Empty;
        this.hdnRightClickSeleccionado.Value = "";
    }

    protected void btnSearchVisible_Click(object sender, ImageClickEventArgs e)
    {
        //Se hizo busqueda con el click derecho sobre el arbol, se tiene en cuenta solamente el nodo sobre
        //el que se dio click derecho
        this.hdnNodoSeleccionado.Value = "";
        //No se de donde aparecen estas comas en el textbox
        this.txtSearch.Text = this.txtSearch.Text.Replace(",", "");
        this.txtSearchVisible.Text = this.txtSearchVisible.Text.Replace(",", "");

        //this.loadGrid();
        txtSearch.Text = string.Empty;
        txtSearchVisible.Text = string.Empty;
        this.hdnRightClickSeleccionado.Value = "";
    }

    protected void btnCrearCaso_Click(object sender, ImageClickEventArgs e)
    {
        Response.Redirect("CreateCase.aspx?NIT=" + this.hdnNIT.Value.ToString());
    }


    private string FormatearFecha(string cadena)
    {
        if (cadena.Contains("1753"))
            return "";
        else
        {
            if (cadena.Length >= 10)
                return cadena.Substring(0, 10);
            else
                return "";
        }

    }


    #region "Filtros de la grilla"

    protected void btnBuscarGrilla_Click(object sender, ImageClickEventArgs e)
    {
        if (string.IsNullOrEmpty(this.txtContiene.Text.Trim()))
            return;

        if (Session["VIEWCASES"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWCASES"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.RowFilter = columna + " LIKE '%" + this.txtContiene.Text.Trim() + "%'";
            dtt = dw.ToTable();

            this.Grid1.DataSource = dtt;
            this.Grid1.DataBind();
            Session["VIEWCASES"] = dtt;

            this.txtContiene.Text = string.Empty;
        }
    }

    protected void lnkAscendente_Click(object sender, EventArgs e)
    {
        if (Session["VIEWCASES"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWCASES"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.Sort = columna + " ASC";
            dtt = dw.ToTable();

            this.Grid1.DataSource = dtt;
            this.Grid1.DataBind();
            Session["VIEWCASES"] = dtt;
        }
    }

    protected void lnkDescendente_Click(object sender, EventArgs e)
    {
        if (Session["VIEWCASES"] != null)
        {
            DataTable dtt = (DataTable)Session["VIEWCASES"];
            string columna = this.hdnColumnaSeleccionada.Value.ToString();

            DataView dw = dtt.DefaultView;
            dw.Sort = columna + " DESC";
            dtt = dw.ToTable();

            this.Grid1.DataSource = dtt;
            this.Grid1.DataBind();
            Session["VIEWCASES"] = dtt;
        }
    }

    protected void lnkSinFiltro_Click(object sender, EventArgs e)
    {
        this.loadGrid();
    }

    #endregion




}
